/*
   joinable
*/
/*
#include<iostream>
#include<thread>
#include<chrono>

void foo()
{
	std::this_thread::sleep_for(std::chrono::seconds(1));
}

int main()
{
	std::thread t;
	std::cout<<"before starting, joinable: "<<t.joinable()<<"\n";

	t = std::thread(foo);
	std::cout<<"after starting, joinable: "<<t.joinable()<<"\n";

	t.join();
}
*/

#include<iostream>
#include<thread>
#include<chrono>

void foo()
{
	// simulate expensive operation
	std::this_thread::sleep_for(std::chrono::seconds(1));
}

void bar()
{
	// simulate expensive operation
	std::this_thread::sleep_for(std::chrono::seconds(1));
}

int main(void)
{
	std::cout<<"starting first helper...\n";
	std::thread helper1(foo);

	std::cout<<"starting second helper...\n";
	std::thread helper2(bar);

	std::cout<<"waiting for helpers to finish..."<<std::endl;
	helper1.join();
	helper2.join();

	std::cout<<"done!"<<"\n";
}
